1 using UnityEngine;
2 using
System.Collections;
3
4 [RequireComponent(
typeof( CharacterController ) )]
5 public
class RPGMovement : MonoBehaviour
6 {
7     
public float ForwardSpeed;
8     
public float BackwardSpeed;
9     
public float StrafeSpeed;
10     
public float RotateSpeed;
11
12     CharacterController m_CharacterController;
13     Vector3 m_LastPosition;
14     Animator m_Animator;
15     PhotonView m_PhotonView;
16     PhotonTransformView m_TransformView;
17
18     
float m_AnimatorSpeed;
19     Vector3 m_CurrentMovement;
20     
float m_CurrentTurnSpeed;
21
22     
void Start()
23     {
24         m_CharacterController = GetComponent<CharacterController>();
25         m_Animator = GetComponent<Animator>();
26         m_PhotonView = GetComponent<PhotonView>();
27         m_TransformView = GetComponent<PhotonTransformView>();
28     }
29
30     
void Update()
31     {
32         
if( m_PhotonView.isMine == true )
33         {
34             ResetSpeedValues();
35
36             UpdateRotateMovement();
37
38             UpdateForwardMovement();
39             UpdateBackwardMovement();
40             UpdateStrafeMovement();
41
42             MoveCharacterController();
43             ApplyGravityToCharacterController();
44
45             ApplySynchronizedValues();
46         }
47
48         UpdateAnimation();
49     }
50
51     
void UpdateAnimation()
52     {
53         Vector3 movementVector = transform.position - m_LastPosition;
54
55         
float speed = Vector3.Dot( movementVector.normalized, transform.forward );
56         
float direction = Vector3.Dot( movementVector.normalized, transform.right );
57
58         
if( Mathf.Abs( speed ) < 0.2f )
59         {
60             speed =
0f;
61         }
62
63         
if( speed > 0.6f )
64         {
65             speed =
1f;
66             direction =
0f;
67         }
68
69         
if( speed >= 0f )
70         {
71             
if( Mathf.Abs( direction ) > 0.7f )
72             {
73                 speed =
1f;
74             }
75         }
76
77         m_AnimatorSpeed = Mathf.MoveTowards( m_AnimatorSpeed, speed, Time.deltaTime *
5f );
78
79         m_Animator.SetFloat(
"Speed", m_AnimatorSpeed );
80         m_Animator.SetFloat(
"Direction", direction );
81
82         m_LastPosition = transform.position;
83     }
84
85     
void ResetSpeedValues()
86     {
87         m_CurrentMovement = Vector3.zero;
88         m_CurrentTurnSpeed =
0;
89     }
90
91     
void ApplySynchronizedValues()
92     {
93         m_TransformView.SetSynchronizedValues( m_CurrentMovement, m_CurrentTurnSpeed );
94     }
95
96     
void ApplyGravityToCharacterController()
97     {
98         m_CharacterController.Move( transform.up * Time.deltaTime * -
9.81f );
99     }
100
101     
void MoveCharacterController()
102     {
103         m_CharacterController.Move( m_CurrentMovement * Time.deltaTime );
104     }
105
106     
void UpdateForwardMovement()
107     {
108         
if( Input.GetKey( KeyCode.W ) == true )
109         {
110             m_CurrentMovement = transform.forward * ForwardSpeed;
111         }
112     }
113
114     
void UpdateBackwardMovement()
115     {
116         
if( Input.GetKey( KeyCode.S ) == true )
117         {
118             m_CurrentMovement = -transform.forward * BackwardSpeed;
119         }
120     }
121
122     
void UpdateStrafeMovement()
123     {
124         
if( Input.GetKey( KeyCode.Q ) == true )
125         {
126             m_CurrentMovement = -transform.right * StrafeSpeed;
127         }
128
129         
if( Input.GetKey( KeyCode.E ) == true )
130         {
131             m_CurrentMovement = transform.right * StrafeSpeed;
132         }
133     }
134
135     
void UpdateRotateMovement()
136     {
137         
if( Input.GetKey( KeyCode.A ) == true )
138         {
139             m_CurrentTurnSpeed = -RotateSpeed;
140             transform.Rotate(
0, -RotateSpeed * Time.deltaTime, 0 );
141         }
142
143         
if( Input.GetKey( KeyCode.D ) == true )
144         {
145             m_CurrentTurnSpeed = RotateSpeed;
146             transform.Rotate(
0, RotateSpeed * Time.deltaTime, 0 );
147         }
148     }
149 }



Trò chơi Tic-Tac-Toe, game đánh caro full source code 53.578 lượt xem

Gõ tìm kiếm nhanh...